package cn.funeralobjects.common.web.controller;

import cn.funeralobjects.common.web.controller.converter.ModelMapper;

import java.util.Optional;

/**
 * 模型转换工具
 *
 * @author FuneralObjects
 * Create date: 2020/4/28 10:13 AM
 */
public interface ModelMapperController<Entity, VO> {

    /**
     * 模型转换器
     *
     * @return 模型转换器
     */
    ModelMapper<Entity, VO> modelMapper();

    /**
     * entity -> vo
     *
     * @param entity entity
     * @return vo
     */
    default VO toVo(Entity entity) {
        return modelMapper().toVo(entity);
    }

    /**
     * entity -> vo
     *
     * @param entity entity
     * @return vo
     */
    @SuppressWarnings("OptionalUsedAsFieldOrParameterType")
    default Optional<VO> toVo(Optional<Entity> entity) {
        return entity.map(this::toVo);
    }
}
